import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const request = axios.create({
  baseURL: import.meta.env.VITE_APP_BASE_API || '/',
  timeout: 30000, // 统一超时时间为30秒
  retry: 3,       // 启用重试，最多重试3次
  retryDelay: 1000 // 重试间隔1秒
} as any); // 使用类型断言确保配置被正确识别

// 请求拦截器
request.interceptors.request.use(
  config => {
    // 添加重试计数
    (config as any).retryCount = (config as any).retryCount || 0;
    // 添加API Key到请求头
    config.headers['Authorization'] = `Bearer ${import.meta.env.VITE_AI_API_KEY}`;
    return config;
  },
  error => {
    console.error('请求配置错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
request.interceptors.response.use(
  response => {
    // 处理响应数据
    return response
  },
  error => {
    // 处理响应错误
    console.error('请求响应错误:', error)
    
    // 重试逻辑
    const config = error.config;
    // 如果配置不存在或未设置重试次数，则直接拒绝
    if (!config || !config.retry || config.retryCount >= config.retry) {
      if (error.response) {
        // 服务器返回了错误状态码
        ElMessage.error(`请求失败: ${error.response.status} ${error.response.statusText}`)
      } else if (error.request) {
        // 请求已发送但未收到响应
        ElMessage.error(`请求超时: 服务器无响应 (${config.timeout}ms)`)
      } else {
        // 设置请求时发生错误
        ElMessage.error(`请求错误: ${error.message}`)
      }
      return Promise.reject(error);
    }
    
    // 增加重试计数
    config.retryCount++;
    
    // 延时重试
    const backoff = new Promise(resolve => {
      setTimeout(() => {
        resolve(1);
      }, config.retryDelay || 1000);
    });
    
    // 重新发送请求
    return backoff.then(() => {
      return request(config);
    });
  }
)

export default request